import request from '@/utils/request';

// 定义前端使用的图片接口
export interface PostImage {
	url : string;
	order : number;
}

// 定义帖子基本信息接口
export type PostBasicInfo = {
	/** 自增ID */
	id : number;
	/** 帖子编码 */
	postCode : string;
	/** 所属圈子ID */
	circleId : number;
	/** 作者用户ID */
	authorUserId : number;
	/** 帖子标题 */
	postTitle : string;
	/** 帖子内容 */
	postContent : string;
	/** 帖子图片列表 - 后端存储为JSON字符串 */
	postImages : string;
	/** 封面图片URL */
	coverImage : string;
	/** 点赞数量统计 */
	likeCount : number;
	/** 评论数量统计 */
	commentCount : number;
	/** 收藏数量统计 */
	favoriteCount : number;
	/** 是否草稿 */
	isDraft : number;
	/** AI审核状态 */
	aiAuditStatus : number;
	/** AI审核拒绝原因 */
	aiAuditReason : string;
	/** AI审核时间 */
	aiAuditTime : string;
	/** 创建人 */
	createdBy : string;
	/** 创建时间 */
	createdTime : string;
	/** 更新人 */
	updatedBy : string;
	/** 更新时间 */
	updatedTime : string;
	/** 删除标志 */
	deletedFlag : number;
}

// 工具函数：图片数组转JSON字符串
export function imagesToString(images : PostImage[]) : string {
	return JSON.stringify(images);
}

// 工具函数：JSON字符串转图片数组
export function stringToImages(imagesStr : string) : PostImage[] {
	try {
		return imagesStr ? JSON.parse(imagesStr) : [];
	} catch (error) {
		console.error('解析图片数据失败:', error);
		return [];
	}
}

// 工具函数：处理从后端获取的帖子数据
export function processPostFromBackend(post : PostBasicInfo) : PostBasicInfo & { postImagesArray : PostImage[] } {
	return {
		...post,
		postImagesArray: stringToImages(post.postImages)
	};
}

// 工具函数：处理发送到后端的帖子数据
export function processPostToBackend(post : any, images : PostImage[]) : PostBasicInfo {
	return {
		...post,
		postImages: imagesToString(images)
	};
}

// 定义查询参数接口，包含分页信息
export interface PostQueryParams {
	pageNum ?: number; // 当前页码
	pageSize ?: number; // 每页数量
	postTitle ?: string; // 帖子标题 (用于模糊查询)
	// ... 其他查询条件根据您的需求补充
}

// 查询帖子管理列表
export function listPost(query) {
	return request({
		url: '/post/post/list',
		method: 'GET',
		params: query
	});
}

// 获取帖子管理详细信息
export function getPost(id : number) {
	return request({
		url: '/post/post/' + id,
		method: 'GET'
	});
}

/**
  * 给用户查询笔记、收藏、点赞的帖子
  *
  * @param type 1:笔记 2:收藏 3:点赞
  */
export const getPostForUser = (type : number, userId : number, query) => {
	return request({
		url: `/post/post/mine/${type}/${userId}`,
		method: 'GET',
		params: query
	});
}

// 新增帖子管理
export function addPost(data) {
	return request({
		url: '/post/post/publish',
		method: 'POST',
		data
	});
}

// 发布帖子并设置标签（事务性操作）
export const publishPostWithTags = (data : any) => {
	return request({
		url: '/post/post/publishWithTags',
		method: 'POST',
		data
	});
}

// 保存帖子草稿
export function savePostDraft(data) {
	return request({
		url: '/post/post/draft',
		method: 'POST',
		data
	});
}

// 获取帖子草稿
export function getPostDraft() {
	return request({
		url: '/post/post/getDraft',
		method: 'GET'
	});
}

// 修改帖子管理
export function updatePost(data : PostBasicInfo) {
	return request({
		url: '/post/post',
		method: 'PUT',
		data
	});
}

// 删除帖子管理
export function delPost(id : number) {
	return request({
		url: '/post/post/' + id,
		method: 'DELETE'
	});
}

// 帖子点赞/取消点赞
export function togglePostLike(postId : number) {
	return request({
		url: '/post/post/like/' + postId,
		method: 'POST'
	});
}

// 帖子收藏/取消收藏
export function togglePostFavorite(postId : number) {
	return request({
		url: '/post/post/favorite/' + postId,
		method: 'POST'
	});
}

/**
* 获取用户点赞的帖子ID列表
*/
export const getUserLikedPostIds = () => {
	return request({
		url: '/post/post/userLiked',
		method: 'GET'
	});
}

/**
* 获取用户收藏的帖子ID列表
*/
export const getUserFavoritePostIds = () => {
	return request({
		url: '/post/post/userFavorite',
		method: 'GET'
	});
}

/**
* 根据circleId查询帖子
*/
export const getPostByCircleId = (circleId : number) => {
	return request({
		url: `/post/post/circle/byId/${circleId}`,
		method: 'GET'
	});
}

// 根据帖子标题查询
export const getPostByPostTitle = (postTitle : string) => {
	return request({
		url: `/post/post/search/${postTitle}`,
		method: 'GET'
	});
}